package com.xxg.renrensearch.service;

import com.xxg.renrensearch.dao.Product;
import com.xxg.renrensearch.domain.query.*;
import com.xxg.renrensearch.domain.result.BaseResult;
import com.xxg.renrensearch.domain.result.ProductCountsBySpuResult;
import com.xxg.renrensearch.domain.result.ProductCountsResult;
import com.xxg.renrensearch.domain.result.ShopWithProducts;

import java.util.List;

/**
 * 商品搜索接口
 *
 * @author xuxiaogang
 * @date 2021-11-26
 */
public interface ProductService {
    /**
     * 根据spuId查询商品信息（包含所有规格）
     *
     * @param spuId 商品spuId
     * @return 结果
     */
    BaseResult<List<Product>> findProductBySpuId(Integer spuId);

    /**
     * 根据店铺ID和排序字段分页查询商品信息
     *
     * @param getProductByOrderTypeQuery 查询条件
     * @return 结果
     */
    BaseResult<List<Product>> findOrderedProductByShopId(GetProductByOrderTypeQuery getProductByOrderTypeQuery);

    /**
     * 根据关键词分页查询商品信息
     *
     * @param query 查询条件
     * @return 结果
     */
    BaseResult<List<Product>> findProductByKeyword(GetProductByKeyWordQuery query);

    /**
     * 分页查询我的商品
     *
     * @param getMyProductQuery 查询条件
     * @return 结果
     */
    BaseResult<List<Product>> findMyOrderedProduct(GetMyProductQuery getMyProductQuery);

    /**
     * 根据店铺获取其不同类型商品的数量
     *
     * @param shopId 店铺ID
     * @return 结果
     */
    BaseResult<ProductCountsResult> findProductCountsByShopId(int shopId);

    /**
     * 根据店铺ID分页查询这个店铺已带货商品信息以店铺进行分组
     *
     * @param query 查询条件
     * @return 结果
     */
    BaseResult<List<ShopWithProducts>> findCarriedProductGroupByShop(GetCarriedProductQuery query);

    /**
     * 根据店铺ID分页查询这个店铺被带货商品信息以店铺进行分组
     *
     * @param query 查询条件
     * @return 结果
     */
    BaseResult<List<ShopWithProducts>> findBeCarriedProductGroupByShop(GetCarriedProductQuery query);

    /**
     * 根据关键字查询我已带货商品
     *
     * @param query 查询条件
     * @return 结果
     */
    BaseResult<List<Product>> findMyCarriedProductByKeyword(GetProductByKeyWordQuery2 query);

    /**
     * 根据关键字查询我被带货商品
     *
     * @param query 查询条件
     * @return 结果
     */
    BaseResult<List<Product>> findMyBeCarriedProductByKeyword(GetProductByKeyWordQuery2 query);

    /**
     * 查询从特定店铺中带货的商品列表
     *
     * @param query 查询条件
     * @return 结果
     */
    BaseResult<List<Product>> findMyCarriedProductByShop(GetCarriedProductQuery2 query);

    /**
     * 查询从特定店铺中被带货的商品列表
     *
     * @param query 查询条件
     * @return 结果
     */
    BaseResult<List<Product>> findBeMyCarriedProductByShop(GetCarriedProductQuery2 query);

    /**
     * 搜索图片
     *
     * @param file 图片文件
     * @return 结果
     */
    BaseResult<List<Product>> searchByPic(byte[] file);

    /**
     * 获取spu的被带货，被采集数量
     *
     * @param spuId spuId
     * @return 结果
     */
    BaseResult<ProductCountsBySpuResult> findProductCountsBySpu(Integer spuId);
}
